programs->ref_count = 1;
for (i = 0; i < GL_N_PROGRAMS; i ++)
{
- programs->state[i].opacity = 1.0f;
+ programs->programs[i].state.opacity = 1.0f;
}
return programs;
{
if (programs->programs[i].id > 0)
glDeleteProgram (programs->programs[i].id);
- gsk_transform_unref (programs->state[i].modelview);
+ gsk_transform_unref (programs->programs[i].state.modelview);
}
g_free (programs);
}
if (!builder->current_program)
return NULL;
- return &builder->programs->state[builder->current_program->index];
+ return &builder->current_program->state;
}
void
void
ops_set_program (RenderOpBuilder *builder,
- const Program *program)
+ Program *program)
{
OpProgram *op;
- ProgramState *program_state;
+ ProgramState *program_state = NULL;
if (builder->current_program == program)
return;
builder->current_program = program;
- program_state = &builder->programs->state[program->index];
+ program_state = &program->state;
if (memcmp (&builder->current_projection, &program_state->projection, sizeof (graphene_matrix_t)) != 0)
{
OpsMatrixMetadata metadata;
} MatrixStackEntry;
+typedef struct
+{
+ GskTransform *modelview;
+ GskRoundedRect clip;
+ graphene_matrix_t projection;
+ int source_texture;
+ graphene_rect_t viewport;
+ float opacity;
+ /* Per-program state */
+ union {
+ GdkRGBA color;
+ struct {
+ graphene_matrix_t matrix;
+ graphene_vec4_t offset;
+ } color_matrix;
+ struct {
+ float widths[4];
+ GdkRGBA color;
+ GskRoundedRect outline;
+ } border;
+ struct {
+ GskRoundedRect outline;
+ float dx;
+ float dy;
+ float spread;
+ GdkRGBA color;
+ } inset_shadow;
+ struct {
+ GskRoundedRect outline;
+ float dx;
+ float dy;
+ float spread;
+ GdkRGBA color;
+ } unblurred_outset_shadow;
+ struct {
+ int n_color_stops;
+ GskColorStop color_stops[GL_MAX_GRADIENT_STOPS];
+ float start_point[2];
+ float end_point[2];
+ } linear_gradient;
+ struct {
+ int n_color_stops;
+ GskColorStop color_stops[GL_MAX_GRADIENT_STOPS];
+ float center[2];
+ float start;
+ float end;
+ float radius[2]; /* h/v */
+ } radial_gradient;
+ };
+} ProgramState;
+
struct _Program
{
int index; /* Into the renderer's program array */
int texture_rect_location;
} repeat;
};
+ ProgramState state;
};
-typedef struct
-{
- GskTransform *modelview;
- GskRoundedRect clip;
- graphene_matrix_t projection;
- int source_texture;
- graphene_rect_t viewport;
- float opacity;
- /* Per-program state */
- union {
- GdkRGBA color;
- struct {
- graphene_matrix_t matrix;
- graphene_vec4_t offset;
- } color_matrix;
- struct {
- float widths[4];
- GdkRGBA color;
- GskRoundedRect outline;
- } border;
- struct {
- GskRoundedRect outline;
- float dx;
- float dy;
- float spread;
- GdkRGBA color;
- } inset_shadow;
- struct {
- GskRoundedRect outline;
- float dx;
- float dy;
- float spread;
- GdkRGBA color;
- } unblurred_outset_shadow;
- struct {
- int n_color_stops;
- GskColorStop color_stops[GL_MAX_GRADIENT_STOPS];
- float start_point[2];
- float end_point[2];
- } linear_gradient;
- struct {
- int n_color_stops;
- GskColorStop color_stops[GL_MAX_GRADIENT_STOPS];
- float center[2];
- float start;
- float end;
- float radius[2]; /* h/v */
- } radial_gradient;
- };
-} ProgramState;
-
typedef struct {
int ref_count;
union {
typedef struct
{
GskGLRendererPrograms *programs;
- const Program *current_program;
+ Program *current_program;
int current_render_target;
int current_texture;
float ops_get_scale (const RenderOpBuilder *builder);
void ops_set_program (RenderOpBuilder *builder,
- const Program *program);
+ Program *program);
void ops_push_clip (RenderOpBuilder *builder,
const GskRoundedRect *clip);